package h.c.z.designPattern.C02_SingletonPattern;

/**
 * 单例模式-静态内部类[推荐用]
 * @author jinsicao
 */
public class Singleton_03 {
	
	private static int i = 0;
	
	private static int j = 0;

	/**
	 * 类的静态属性只会在第一次加载类的时候初始化，所以在这里，JVM帮助我们保证了线程的安全性，在类进行初始化时，别的线程是无法进入的。
	 */
	private static class SingletonFactory {
		public static Singleton_03 instance = new Singleton_03();
	}
	
	private Singleton_03() {
		System.out.println("Singleton_03#" + i++);
	}
	
	/**
	 * 静态内部类
	 * @return
	 */
	public static Singleton_03 getInstance() {
		System.out.println("Singleton_03->getInstance#" + j++);
		return SingletonFactory.instance;
	}
}
